package com.hardson.toolkit.interfaces;

import com.hardson.toolkit.util.JsonUtil;
import org.apache.commons.lang3.SerializationUtils;

import java.io.Serializable;

/**
 * 对象深拷贝接口
 * 接口提供了多种深拷贝的方法，调用者根据实际情况选择使用
 *
 * @author hardson
 * @date 2023/8/30 上午11:11
 */
public interface IDeepClone extends Serializable {

    /**
     * 以流的方式进行深拷贝
     *
     * @return T
     * @author hardson
     * @date 2023/8/30 上午11:13
     */
    @SuppressWarnings("unchecked")
    default <T> T serializeClone() {
        return (T) SerializationUtils.clone(this);
    }

    /**
     * 以Json的方式进行深拷贝
     *
     * @return T
     * @author hardson
     * @date 2023/8/30 上午11:12
     */
    @SuppressWarnings("unchecked")
    default <T> T jasonClone() {
        return (T) JsonUtil.deepClone(this);
    }

}
